package com.version1.diabeco.service;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.Date;
import java.util.List;

import android.app.AlarmManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.preference.PreferenceManager;

public class AlarmaInicializador {

	private static final int ALARM_REQUEST_CODE = 11291;

	public static void inicializarAlarmas(Context context, AlarmManager am) {

		resetAlarmas(context, am);
		inicializarAlarmasGlucemia(context, am);
		inicializarAlarmasMedicacion(context, am);
		inicializarAlarmasPeso(context, am);
		
	}
	private static void resetAlarmas(Context context, AlarmManager am) {

		Calendar calendar = Calendar.getInstance();

		for (int i = 0 ; i < 24 ; i++) {
			calendar.clear();
			Date now = new Date();
			calendar.setTime(now);
			calendar.set(Calendar.MINUTE, 0);
			calendar.set(Calendar.SECOND, 0);
			calendar.set(Calendar.HOUR_OF_DAY, i);
			
			Intent intent = new Intent(context, AlarmaRegistroGlucosa.class);
			PendingIntent sender = PendingIntent.getBroadcast(context, ALARM_REQUEST_CODE + i, intent,
					PendingIntent.FLAG_CANCEL_CURRENT);
			sender.cancel();
			am.cancel(sender);
		}
		
	}
	
	private static void inicializarAlarmasGlucemia(Context context, AlarmManager am) {
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

		List<Integer> horasAlarma = new ArrayList<Integer>();
		List<Integer> horasSinAlarma = new ArrayList<Integer>();

		if (prefs.getBoolean("RecordatorioMedicionHora0", false)) {
			horasAlarma.add(0);
		} else {
			horasSinAlarma.add(0);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora1", false)) {
			horasAlarma.add(1);
		} else {
			horasSinAlarma.add(1);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora2", false)) {
			horasAlarma.add(2);
		} else {
			horasSinAlarma.add(2);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora3", false)) {
			horasAlarma.add(3);
		} else {
			horasSinAlarma.add(3);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora4", false)) {
			horasAlarma.add(4);
		} else {
			horasSinAlarma.add(4);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora5", false)) {
			horasAlarma.add(5);
		} else {
			horasSinAlarma.add(5);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora6", false)) {
			horasAlarma.add(6);
		} else {
			horasSinAlarma.add(6);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora7", false)) {
			horasAlarma.add(7);
		} else {
			horasSinAlarma.add(7);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora8", false)) {
			horasAlarma.add(8);
		} else {
			horasSinAlarma.add(8);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora9", false)) {
			horasAlarma.add(9);
		} else {
			horasSinAlarma.add(9);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora10", false)) {
			horasAlarma.add(10);
		} else {
			horasSinAlarma.add(10);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora11", false)) {
			horasAlarma.add(11);
		} else {
			horasSinAlarma.add(11);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora12", false)) {
			horasAlarma.add(12);
		} else {
			horasSinAlarma.add(12);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora13", false)) {
			horasAlarma.add(13);
		} else {
			horasSinAlarma.add(13);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora14", false)) {
			horasAlarma.add(14);
		} else {
			horasSinAlarma.add(14);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora15", false)) {
			horasAlarma.add(15);
		} else {
			horasSinAlarma.add(15);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora16", false)) {
			horasAlarma.add(16);
		} else {
			horasSinAlarma.add(16);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora17", false)) {
			horasAlarma.add(17);
		} else {
			horasSinAlarma.add(17);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora18", false)) {
			horasAlarma.add(18);
		} else {
			horasSinAlarma.add(18);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora19", false)) {
			horasAlarma.add(19);
		} else {
			horasSinAlarma.add(19);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora20", false)) {
			horasAlarma.add(20);
		} else {
			horasSinAlarma.add(20);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora21", false)) {
			horasAlarma.add(21);
		} else {
			horasSinAlarma.add(21);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora22", false)) {
			horasAlarma.add(22);
		} else {
			horasSinAlarma.add(22);
		}
		if (prefs.getBoolean("RecordatorioMedicionHora23", false)) {
			horasAlarma.add(23);
		} else {
			horasSinAlarma.add(23);
		}

		setAlarms(context, am, horasAlarma, horasSinAlarma);
	}

	private static void inicializarAlarmasMedicacion(Context context, AlarmManager am) {
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

		List<Integer> horasAlarma = new ArrayList<Integer>();
		List<Integer> horasSinAlarma = new ArrayList<Integer>();

		if (prefs.getBoolean("RecordatorioMedicacionHora0", false)) {
			horasAlarma.add(0);
		} else {
			horasSinAlarma.add(0);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora1", false)) {
			horasAlarma.add(1);
		} else {
			horasSinAlarma.add(1);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora2", false)) {
			horasAlarma.add(2);
		} else {
			horasSinAlarma.add(2);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora3", false)) {
			horasAlarma.add(3);
		} else {
			horasSinAlarma.add(3);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora4", false)) {
			horasAlarma.add(4);
		} else {
			horasSinAlarma.add(4);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora5", false)) {
			horasAlarma.add(5);
		} else {
			horasSinAlarma.add(5);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora6", false)) {
			horasAlarma.add(6);
		} else {
			horasSinAlarma.add(6);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora7", false)) {
			horasAlarma.add(7);
		} else {
			horasSinAlarma.add(7);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora8", false)) {
			horasAlarma.add(8);
		} else {
			horasSinAlarma.add(8);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora9", false)) {
			horasAlarma.add(9);
		} else {
			horasSinAlarma.add(9);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora10", false)) {
			horasAlarma.add(10);
		} else {
			horasSinAlarma.add(10);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora11", false)) {
			horasAlarma.add(11);
		} else {
			horasSinAlarma.add(11);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora12", false)) {
			horasAlarma.add(12);
		} else {
			horasSinAlarma.add(12);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora13", false)) {
			horasAlarma.add(13);
		} else {
			horasSinAlarma.add(13);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora14", false)) {
			horasAlarma.add(14);
		} else {
			horasSinAlarma.add(14);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora15", false)) {
			horasAlarma.add(15);
		} else {
			horasSinAlarma.add(15);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora16", false)) {
			horasAlarma.add(16);
		} else {
			horasSinAlarma.add(16);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora17", false)) {
			horasAlarma.add(17);
		} else {
			horasSinAlarma.add(17);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora18", false)) {
			horasAlarma.add(18);
		} else {
			horasSinAlarma.add(18);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora19", false)) {
			horasAlarma.add(19);
		} else {
			horasSinAlarma.add(19);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora20", false)) {
			horasAlarma.add(20);
		} else {
			horasSinAlarma.add(20);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora21", false)) {
			horasAlarma.add(21);
		} else {
			horasSinAlarma.add(21);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora22", false)) {
			horasAlarma.add(22);
		} else {
			horasSinAlarma.add(22);
		}
		if (prefs.getBoolean("RecordatorioMedicacionHora23", false)) {
			horasAlarma.add(23);
		} else {
			horasSinAlarma.add(23);
		}

		setAlarms(context, am, horasAlarma, horasSinAlarma);

	}

	private static void inicializarAlarmasPeso(Context context, AlarmManager am) {
		SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context);

		List<Integer> horasAlarma = new ArrayList<Integer>();
		List<Integer> horasSinAlarma = new ArrayList<Integer>();

		if (prefs.getBoolean("RecordatorioPesoHora0", false)) {
			horasAlarma.add(0);
		} else {
			horasSinAlarma.add(0);
		}
		if (prefs.getBoolean("RecordatorioPesoHora1", false)) {
			horasAlarma.add(1);
		} else {
			horasSinAlarma.add(1);
		}
		if (prefs.getBoolean("RecordatorioPesoHora2", false)) {
			horasAlarma.add(2);
		} else {
			horasSinAlarma.add(2);
		}
		if (prefs.getBoolean("RecordatorioPesoHora3", false)) {
			horasAlarma.add(3);
		} else {
			horasSinAlarma.add(3);
		}
		if (prefs.getBoolean("RecordatorioPesoHora4", false)) {
			horasAlarma.add(4);
		} else {
			horasSinAlarma.add(4);
		}
		if (prefs.getBoolean("RecordatorioPesoHora5", false)) {
			horasAlarma.add(5);
		} else {
			horasSinAlarma.add(5);
		}
		if (prefs.getBoolean("RecordatorioPesoHora6", false)) {
			horasAlarma.add(6);
		} else {
			horasSinAlarma.add(6);
		}
		if (prefs.getBoolean("RecordatorioPesoHora7", false)) {
			horasAlarma.add(7);
		} else {
			horasSinAlarma.add(7);
		}
		if (prefs.getBoolean("RecordatorioPesoHora8", false)) {
			horasAlarma.add(8);
		} else {
			horasSinAlarma.add(8);
		}
		if (prefs.getBoolean("RecordatorioPesoHora9", false)) {
			horasAlarma.add(9);
		} else {
			horasSinAlarma.add(9);
		}
		if (prefs.getBoolean("RecordatorioPesoHora10", false)) {
			horasAlarma.add(10);
		} else {
			horasSinAlarma.add(10);
		}
		if (prefs.getBoolean("RecordatorioPesoHora11", false)) {
			horasAlarma.add(11);
		} else {
			horasSinAlarma.add(11);
		}
		if (prefs.getBoolean("RecordatorioPesoHora12", false)) {
			horasAlarma.add(12);
		} else {
			horasSinAlarma.add(12);
		}
		if (prefs.getBoolean("RecordatorioPesoHora13", false)) {
			horasAlarma.add(13);
		} else {
			horasSinAlarma.add(13);
		}
		if (prefs.getBoolean("RecordatorioPesoHora14", false)) {
			horasAlarma.add(14);
		} else {
			horasSinAlarma.add(14);
		}
		if (prefs.getBoolean("RecordatorioPesoHora15", false)) {
			horasAlarma.add(15);
		} else {
			horasSinAlarma.add(15);
		}
		if (prefs.getBoolean("RecordatorioPesoHora16", false)) {
			horasAlarma.add(16);
		} else {
			horasSinAlarma.add(16);
		}
		if (prefs.getBoolean("RecordatorioPesoHora17", false)) {
			horasAlarma.add(17);
		} else {
			horasSinAlarma.add(17);
		}
		if (prefs.getBoolean("RecordatorioPesoHora18", false)) {
			horasAlarma.add(18);
		} else {
			horasSinAlarma.add(18);
		}
		if (prefs.getBoolean("RecordatorioPesoHora19", false)) {
			horasAlarma.add(19);
		} else {
			horasSinAlarma.add(19);
		}
		if (prefs.getBoolean("RecordatorioPesoHora20", false)) {
			horasAlarma.add(20);
		} else {
			horasSinAlarma.add(20);
		}
		if (prefs.getBoolean("RecordatorioPesoHora21", false)) {
			horasAlarma.add(21);
		} else {
			horasSinAlarma.add(21);
		}
		if (prefs.getBoolean("RecordatorioPesoHora22", false)) {
			horasAlarma.add(22);
		} else {
			horasSinAlarma.add(22);
		}
		if (prefs.getBoolean("RecordatorioPesoHora23", false)) {
			horasAlarma.add(23);
		} else {
			horasSinAlarma.add(23);
		}

		setAlarms(context, am, horasAlarma, horasSinAlarma);

	}

	private static void setAlarms(Context context, AlarmManager am, List<Integer> horasAlarma, List<Integer> horasSinAlarma) {

		Calendar calendar = Calendar.getInstance();

		for (Integer hora : horasAlarma) {
			Date now = new Date();
			calendar.setTime(now);
			calendar.set(Calendar.MINUTE, 0);
			calendar.set(Calendar.SECOND, 0);
			calendar.set(Calendar.HOUR_OF_DAY, hora);
			if (calendar.getTime().before(now)) {
				calendar.roll(Calendar.DATE, 1);
			}

			Intent intent = new Intent(context, AlarmaRegistroGlucosa.class);
			intent.putExtra(AlarmaService.BROADCAST_TEXT, "Registro de glucemia hora " + hora);
			PendingIntent sender = PendingIntent.getBroadcast(context, ALARM_REQUEST_CODE + hora, intent,
					PendingIntent.FLAG_UPDATE_CURRENT);
			am.setRepeating(AlarmManager.RTC_WAKEUP, calendar.getTimeInMillis(), AlarmManager.INTERVAL_DAY, sender);
		}
	}

}
